package com.internetCafes.spms.web.customer.mapper.customer;

import com.baomidou.mybatisplus.annotation.SqlParser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.internetCafes.spms.core.annotation.NoTentant;
import com.internetCafes.spms.web.customer.entity.customer.Customer;
import com.internetCafes.spms.web.customer.model.customer.*;
import com.internetCafes.spms.web.customer.model.customer.quali.CustomerQualiDo;
import com.internetCafes.spms.web.customer.model.customer.quali.CustomerQualiPo;
import com.internetCafes.spms.web.toolbox.entity.QualiConf;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 客户信息表 Mapper 接口
 * </p>
 *
 * @author Zj
 * @since 2021-10-20
 */
@Mapper
public interface CustomerMapper extends BaseMapper<Customer> {

    /**
     * 更新客户按年统计 是否成交标签
     */
    @SqlParser(filter = true)
    @NoTentant
    void updateYearDealFlag();

    /**
     * 获取未跟进客户列表
     * @return 客户列表
     */
    @SqlParser(filter = true)
    @NoTentant
    List<Customer> unFollowCustomerList();

    /**
     * 客户资质获取
     *
     * @param customerQualiDo 请求参数
     * @return 资质列表信息
     */
    @SqlParser(filter = true)
    @NoTentant
    List<CustomerQualiPo> customerQualiPoList(@Param("customerQualiDo") CustomerQualiDo customerQualiDo);

    /**
     * 资质信息列表
     *
     * @param customerId 客户id
     * @return 客户资质信息列表
     */
    @SqlParser(filter = true)
    @NoTentant
    List<QualiConf> qualiConfList(@Param("customerId") Long customerId);

    /**
     * 客户详情信息
     *
     * @param customerDetailDo 自定义请求实体类参数
     * @return 详细信息
     */
    CustomerDetailPo customerPoDetail(@Param("customerDetailDo") CustomerDetailDo customerDetailDo);

    /**
     * 获取客户详情列表
     *
     * @param customerDetailListDo 自定义请求实体类参数
     * @return 详情列表
     */
    List<CustomerDetailPo> customerPoDetailList(@Param("customerDetailListDo") CustomerDetailListDo customerDetailListDo);

    /**
     * 客户Po分页信息获取
     *  <p>
     *      由于sql语句 deptManagerId 部门管理人id
     *      查询中sql语句不能使用SqlParser解析，所以去租户过滤进行手动添加
     *  </p>
     * @param page             分页
     * @param customerPagingDo 分页请求参数
     * @return 分页数据
     */
    Page<CustomerPagingPo> customerPoPaging(Page<Customer> page, @Param("customerPagingDo") CustomerPagingDo customerPagingDo);

    /**
     * 客户Poexcel导出信息获取
     *
     * @param customerPagingDo 请求参数
     * @return excel数据
     */
    List<CustomerPagingPo> customerPoList(@Param("customerPagingDo") CustomerPagingDo customerPagingDo);
}
